package modelo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * La Clase Producto representa a un producto que se puede comprar en la
 * tienda. Ademas es una entidad JPA que mapea un registro de la tabla
 * Producto desde la BD.
 * 
 * @author Franco Camilo Gonzalez Chaparro.
 */
@Entity
@Table(name = "producto")
public class Producto implements Serializable {
    /**
     * variable usada para guardar la version de la clase para la
     * serializacion.
     */
    private static final long serialVersionUID = 1L;
    /**
     * El atributo codProducto es la identificacion unica de un producto.
     */
    @Id
    @Column(name = "COD_PRODUCTO")
    private String codProducto;
    /**
     * El atributo nombre es el nombre del producto.
     */
    @Column(name = "NOMBRE")
    private String nombre;
    /**
     * El atributo descripcion es la descripcion de un producto.
     */
    @Column(name = "DESCRIPCION")
    private String descripcion;
    /**
     * El atributo precio es el valor que tiene un producto.
     */
    @Column(name = "PRECIO")
    private int precio;
    /**
     * El atributo cantidad es el stock que tiene este producto en la BD.
     */
    @Column(name = "CANTIDAD")
    private int cantidad;

    /**
     * Constructor por defecto de la Clase Producto.
     */
    public Producto() {
        super();
    }

    /**
     * Constructor de la Clase Producto.
     *
     * @param codProducto es la identificacion unica de un producto.
     * @param nombre es el nombre del producto.
     * @param descripcion es la descripcion de un producto.
     * @param precio es el valor que tiene un producto.
     * @param cantidad es el stock que tiene este producto en la BD.
     */
    public Producto(String codProducto, String nombre, String descripcion,
            int precio, int cantidad) {
        super();
        this.codProducto = codProducto;
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.precio = precio;
        this.cantidad = cantidad;
    }

    /**
     * Permite obtener el valor del atributo codProducto.
     * 
     * @return el valor de codProducto.
     */
    public String getCodProducto() {
        return codProducto;
    }

    /**
     * Permite establecer el valor del atributo codProducto.
     * 
     * @param codProducto
     *            contiene el nuevo valor para el atributo codProducto.
     */
    public void setCodProducto(String codProducto) {
        this.codProducto = codProducto;
    }

    /**
     * Permite obtener el valor del atributo nombre.
     * 
     * @return el valor de nombre.
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Permite establecer el valor del atributo nombre.
     * 
     * @param nombre
     *            contiene el nuevo valor para el atributo nombre.
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Permite obtener el valor del atributo descripcion.
     * 
     * @return el valor de descripcion.
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Permite establecer el valor del atributo descripcion.
     * 
     * @param descripcion
     *            contiene el nuevo valor para el atributo descripcion.
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * Permite obtener el valor del atributo precio.
     * 
     * @return el valor de precio.
     */
    public int getPrecio() {
        return precio;
    }

    /**
     * Permite establecer el valor del atributo precio.
     * 
     * @param precio
     *            contiene el nuevo valor para el atributo precio.
     */
    public void setPrecio(int precio) {
        this.precio = precio;
    }

    /**
     * Permite obtener el valor del atributo cantidad.
     * 
     * @return el valor de cantidad.
     */
    public int getCantidad() {
        return cantidad;
    }

    /**
     * Permite establecer el valor del atributo cantidad.
     * 
     * @param cantidad
     *            contiene el nuevo valor para el atributo cantidad.
     */
    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

}
